package com.dearbinge.utils;

import java.security.MessageDigest;

/**
 *
 */
public final class MD5s {

	public static void main(String[] args) {

		System.out.println(execute("13761660481f45f9423584d420cd810e942f"));

	}

	/**
	 * 32位
	 *
	 * @param plainText
	 * @return
	 */
	public static String execute(String plainText) {
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(plainText.getBytes("UTF-8"));
			byte b[] = md.digest();
			int i;
			StringBuilder buf = new StringBuilder("");
			for (int offset = 0; offset < b.length; offset++) {
				i = b[offset];
				if (i < 0) {
					i += 256;
				}
				if (i < 16) {
					buf.append("0");
				}
				buf.append(Integer.toHexString(i));
			}

			return buf.toString();

		} catch (Exception e) {
			throw new RuntimeException(e);
		}

	}

	private static String byteArrayToHexString(byte b[]) {

		StringBuffer resultSb = new StringBuffer();

		for (int i = 0; i < b.length; i++)

			resultSb.append(byteToHexString(b[i]));

		return resultSb.toString();

	}

	private static String byteToHexString(byte b) {

		int n = b;

		if (n < 0)

			n += 256;

		int d1 = n / 16;

		int d2 = n % 16;

		return hexDigits[d1] + hexDigits[d2];

	}

	public static String MD5Encode(String origin, String charsetname) {

		String resultString = null;

		try {

			resultString = new String(origin);

			MessageDigest md = MessageDigest.getInstance("MD5");

			if (charsetname == null || "".equals(charsetname))

				resultString = byteArrayToHexString(md.digest(resultString

				.getBytes()));

			else

				resultString = byteArrayToHexString(md.digest(resultString

				.getBytes(charsetname)));

		} catch (Exception exception) {

		}

		return resultString;

	}

	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

}
